package com.qing.base;

/**
 * 变量的基础知识
 */
public class Variable {

    public static void main(String[] args) {

        //数据类型分为两大类，基本数据类型、引用数据类型
        //基本数据类型分为八大类 byte、short、int、long、char、float、double、boolean
        //引用数据类型 String、接口、类

        //整数
        byte num3 = 1;
        short num2 = 1;
        int num1 = 1;
        long num4 = 1L;
        //小数：浮点数
        float num5 = 1F;
        double num6 = 1D;
        //字符
        char c = 'b';
        //布尔：是否
        boolean flag = true;
        boolean flag1 = false;

        //低容量到高容量升序
        //byte-》short-》char-》int-》long->float->double
        int i = 128;
        //高到低需要强制转换  （类型）变量名  会输出-128
        byte b = (byte) i;
        //低到高自动转换   会输出128.0
        double d = i;
        /*注意点
         * 1：不能对布尔值进行转换
         * 2：不能把对象转成不相干的类型
         * 3：高容量转低容量的时候，需要强制转换
         * 4：转换的时候可能存在内存溢出，以及精度问题
         * */

        //操作数据比较大的时候，注意溢出问题
        //jdk7特性，数字之间可以用下划线分割，方便看数
        int money = 10_0000_0000;
        System.out.println(money);//输出1000000000
        int year = 20;
        int total1 = money * year;//输出-1474836480
        long total2 = money * year;//输出-1474836480
        long total3 = money * ((long) year);//输出20000000000
        long total4 = ((long) money) * year;//输出20000000000

        //声明单个变量
        String name = "xx";
        //声明多个变量
        String name1 = "xx", name2 = "xx";
        int a = 1, aa = 2;

        //变量
        //属性也是变量 String name; int age;
        //局部变量必须声明和初始化值 （一个class中有个方法，方法中有个属性，即局部变量）
        //实例变量中如果值未被初始化，这个值默认是0或者0.0 或者null，注意：布尔值默认是false；（在class下有个变量，即实例变量）


        //常量
        //final static type varName = "a";
        //static final type varName = 1;
        //常量也必须声明和初始化，修饰符顺序无关，全局使用中不可修改


        //命名规范
        /*
         * 所有变量、类、方法都要：见名知意
         * 类成员变量、局部变量、方法名 要遵循驼峰命名   man   goodMan
         * 常量要大写，多词组用下划线分割  final static int NAME_LENGTH = 10;
         * 类名 首字母要大写，并且遵循驼峰命名  Man  GoodMan;
         * */
    }
}